package com.sgcc.pda.mdrh.h5.jsbridge;

import android.content.Intent;

import com.sgcc.pda.baselibrary.utils.LogUtil;
import com.sgcc.pda.common.aidl.CommonResults;
import com.sgcc.pda.mdrh.h5.library.BridgeWebView;
import com.sgcc.pda.mdrh.h5.library.CallBackFunction;
import com.sgcc.pda.mdrh.utils.ToolGson2;


/**
 * java调用js的方法
 */
public class MixCallHandler {

    private static final String TAG = "MixCallHandler";
    BridgeWebView bridgeWebView;

    /**
     * 单例使用
     */
    private MixCallHandler() {

    }

    private static class SingletonHolder {
        private static final MixCallHandler INSTANCE = new MixCallHandler();
    }

    public static MixCallHandler getInstance() {
        return SingletonHolder.INSTANCE;
    }

    /**
     * 注册BridgeWebView
     * 原生向js发送消息
     *
     * @param bridgeWebView
     */
    public void registBridgeView(BridgeWebView bridgeWebView) {
        this.bridgeWebView = bridgeWebView;
    }

    public void javaToJS(Intent intent) {
        if (bridgeWebView != null) {
            String data = ToolGson2.getJsonStr(intent);
            if (!data.equals("{}")) {
                bridgeWebView.callHandler("javatoJS", data, new CallBackFunction() {
                    @Override
                    public void onCallBack(String data) {
                        LogUtil.i("toJSOrderDetail 方法 " + data);
                    }
                });
            }
        }
    }

    /**
     * java 调用js的方法：
     */
    @Deprecated
    public void javaToJs(CommonResults commonResults) throws Exception {
        if (bridgeWebView != null) {
            bridgeWebView.callHandler("javaToJs_Callback", commonResults.toJSON(), new CallBackFunction() {
                @Override
                public void onCallBack(String data) {
                    LogUtil.d("java调用js的返回数据: " + data);
                }
            });
        } else {
            throw new Exception("webView == null,webView为注册");
        }
    }

    /**
     * java 回调给js数据：（仅需要在 js一次调用java，java多次返回给js 时使用）
     * 此方法需要与js端 进行调用接口方法名统一；
     * js供java调用接口（即java回调给js的接口）名称为 ：【“javaToJs_” + js调用java的接口名】
     * 例如：js调用java的接口方法名为 inventory，那么java调用js的接口名就是：“javaToJs_inventory”
     *
     * @param methodName    js调用java的方法名
     * @param commonResults java回调给js的数据bean
     */
    public void javaToJsCallback(String methodName, CommonResults commonResults) {
        if (bridgeWebView != null) {
            bridgeWebView.callHandler("javaToJs_" + methodName, commonResults.toJSON(), new CallBackFunction() {
                @Override
                public void onCallBack(String data) {
                    LogUtil.d("java调用js的返回数据: " + data);
                }
            });
        } else {
            LogUtil.e("bridgeWebVeiw == null");
        }
    }
}
